package cn.maxwell.feignclient;

import cn.maxwell.result.JsonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 主配置类增加@EnableFeignClients标签 , 其value属性可以指定Feign的客户端接口的包,当然也可以省略value属性
 * 此注解会在服务启动时被你在启动类中加的@EnableFeignClients扫描，
 * 				他会去找他自己同级以及一下所有加了@FeignClient("user-server")的接口，找到之后会使用动态代理
 * 				创建接口的实现类，实现类中他会根据接口的请求路径+方法的请求方式、参数、返回值、请求路径，合在一起
 * 				使用RestTemplate+Ribbon帮我们进行调用
 */
//启动即加载
@RequestMapping("/movieTicket")
@FeignClient(value = "service-movie",fallbackFactory = MovieFallback.class)
public interface MoveFeiGinClient {
    /**
     * 获取对象
     */
    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    JsonResult get(@PathVariable("id") Long id);

    /**
     * 查询所有对象
     */
    @RequestMapping(value = "/list",method = RequestMethod.GET)
    JsonResult list();

    /**
     * 购买电影票
     * @param id
     * @param userId
     * @param count
     * @return
     */
    @GetMapping(value = "byMovieTicket/{id}/{userId}/{count}")
    JsonResult byMovieTicket(@PathVariable("id") Long id,@PathVariable("userId") Long userId,@PathVariable("count") Integer count);


    /**
     * 观看电影
     * @param id
     * @param userId
     * @return
     */
    @GetMapping(value = "see/{id}/{userId}")
    JsonResult seeMovie(@PathVariable("id") Long id,@PathVariable("userId") Long userId);
}
